﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TMD.GT.Entidades;
using TMD.GT.AccesoDatos.Map;
using TMD.GT.AccesoDatos.Contrato;
using TMD.GT.AccesoDatos.Core;
using System.Data.Common;
using System.Data;
using TMD.Contrato;

namespace TMD.GT.AccesoDatos.Implementacion
{
    public class RiesgoData : DataBase, IRiesgoData
    {

         public RiesgoData(String connectionString)
            : base(connectionString)
        {
        }


        public List<Riesgo> ListarRiesgos()
        {
            List<Riesgo> listaRiesgo = new List<Riesgo>();

            using (DbCommand command = DB.GetStoredProcCommand("USP_RIESGO_SEL"))
            {
                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaRiesgo.Add(RiesgoMap.Select(reader));
                    }
                }
            }

            return listaRiesgo;
        }

        


        public List<Riesgo> ListarRiesgos(Componente componente)
        {
            List<Riesgo> listaRiesgo = new List<Riesgo>();

            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_CRITERIOEVALUACION_SEL"))
            {
                DB.AddInParameter(command, "@CODIGO_COMPONENTE", DbType.String, componente.CodigoComponente);
                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaRiesgo.Add(RiesgoMap.Select(reader));
                    }
                }
            }

            return listaRiesgo;
        }







        public List<Riesgo> ListarRiesgos(Riesgo riesgo)
        {
            List<Riesgo> listaRiesgo = new List<Riesgo>();

            using (DbCommand command = DB.GetStoredProcCommand("dbo.USP_RIESGO_FILTRO_SEL"))
            {
                DB.AddInParameter(command, "@CODIGO_RIESGO", DbType.String, riesgo.CODIGO_RIESGO);
                DB.AddInParameter(command, "@CODIGO_RIESGO_TIPO", DbType.Int16, riesgo.CODIGO_RIESGO_TIPO);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, riesgo.NOMBRE);


                using (IDataReader reader = DB.ExecuteReader(command))
                {
                    while (reader.Read())
                    {
                        listaRiesgo.Add(RiesgoMap.Select(reader));
                    }
                }
            }

            return listaRiesgo;
        }




        public void InsertarRiesgo(Riesgo riesgo)
        {
            using (DbCommand command = DB.GetStoredProcCommand("GT.USP_INSERT_RIESGO"))
            {
                DB.AddInParameter(command, "@DESCRIPCION", DbType.String, riesgo.DESCRIPCION);
                DB.AddInParameter(command, "@ESTADO", DbType.String, riesgo.ESTADO);
                DB.AddInParameter(command, "@CODIGO_RIESGO_TIPO", DbType.Int32, riesgo.CODIGO_RIESGO_TIPO);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, riesgo.NOMBRE);
                DB.ExecuteNonQuery(command);
            }
        }



        public void ActualizarRiesgo(Riesgo riesgo)
        {
            using (DbCommand command = DB.GetStoredProcCommand("GT.USP_UPDATE_RIESGO"))
            {
                DB.AddInParameter(command, "@CODIGO_RIESGO", DbType.Int32, riesgo.CODIGO_RIESGO);
                DB.AddInParameter(command, "@DESCRIPCION", DbType.String, riesgo.DESCRIPCION);
                DB.AddInParameter(command, "@ESTADO", DbType.String, riesgo.ESTADO);
                DB.AddInParameter(command, "@CODIGO_RIESGO_TIPO", DbType.Int32, riesgo.CODIGO_RIESGO_TIPO);
                DB.AddInParameter(command, "@NOMBRE", DbType.String, riesgo.NOMBRE);
                DB.ExecuteNonQuery(command);
            }
        }





        public void EliminarRiesgo(Riesgo riesgo, out int iError, out string mError)
        {
            using (DbCommand command = DB.GetStoredProcCommand("GT.USP_DELETE_RIESGO"))
            {
                DB.AddInParameter(command, "@CODIGO_RIESGO", DbType.Int32, riesgo.CODIGO_RIESGO);
                DB.AddOutParameter(command, "@IERROR", DbType.Int32, 3);
                DB.AddOutParameter(command, "@MERROR", DbType.String, 1000);
                DB.ExecuteNonQuery(command);

                iError = Convert.ToInt32(command.Parameters["@IERROR"].Value.ToString());
                mError = command.Parameters["@MERROR"].Value.ToString();

            }

        }












        
    }
}
